package com.showmaker.controller;

import com.showmaker.constant.MessageConstant;
import com.showmaker.constant.RedisMessageConstant;
import com.showmaker.entity.Result;
import com.showmaker.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 短信验证码
 */
@RestController
@RequestMapping("/validateCode")
public class ValidateCodeController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 接收请求，给指定的手机发送短信验证码
     * @param telephone 指定的手机号
     * @return 返回发送短信验证码的结果
     */
    @RequestMapping("/send4Order/{telephone}")
    public Result send4Order(@PathVariable String telephone) {
        Integer integer = ValidateCodeUtils.generateValidateCode(4);
        try {
            // 模拟发送短信，这里直接在控制台输出
            System.out.println("收到的短信验证码为：" + integer.toString());
            // 将验证码缓存到 Redis 中
            ValueOperations operations = redisTemplate.opsForValue();
            // 设置验证码的有效期为 5 分钟
            operations.set(telephone + RedisMessageConstant.SENDTYPE_ORDER, integer.toString(), 5, TimeUnit.MINUTES);
        } catch (Exception e) {
            e.printStackTrace();
            // 如果发送验证码时 或 进行缓存时出现了错误，直接返回错误信息
            return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }

        return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
    }

    /**
     * 接收请求，给指定的手机发送短信验证码
     * @param telephone 指定的手机号
     * @return 返回发送短信验证码的结果
     */
    @RequestMapping("/send4Login/{telephone}")
    public Result send4Login(@PathVariable String telephone) {
        Integer integer = ValidateCodeUtils.generateValidateCode(6);
        try {
            // 模拟发送短信，这里直接在控制台输出
            System.out.println("收到的短信验证码为：" + integer.toString());
            // 将验证码缓存到 Redis 中
            ValueOperations operations = redisTemplate.opsForValue();
            // 设置验证码的有效期为 5 分钟
            operations.set(telephone + RedisMessageConstant.SENDTYPE_LOGIN, integer.toString(), 5, TimeUnit.MINUTES);
        } catch (Exception e) {
            e.printStackTrace();
            // 如果发送验证码时 或 进行缓存时出现了错误，直接返回错误信息
            return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
        }

        return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
    }

}
